/**
 * Lista wielkich liczb i wielkich liczb zespolonych.
 *
 * Napisz klasę umożliwiającą utworzenie dwukierunkowej listy, która jednocześnie będzie w stanie
 * przechowywać zarówno obiekty reprezentujące duże liczby, jak i obiekty reprezentujące liczby
 * zespolone. Jak to zrobić? Jest takie pojęcie "dziedziczenie", które należy wykorzystać do tego celu,
 * ale o tym więcej już na ćwiczeniach, albo konsultacjach.
 *
 * Na liście możemy wykonać następujące operacje:
 *
 * wstaw element na koniec listy
 * wstaw element na początek listy
 * wstaw element na i-tą pozycję, jeżeli podano pozycję ujemną to wstaw element na początek,
 *      a jak podano pozycję, która nie istnieje to wstaw na koniec.
 * usuń ostatni element listy
 * usuń pierwszy element listy
 * usuń i-ty element listy
 * usuń całą listę
 * posortuj listę rosnąco
 * wyświetl listę (operator<<).
 *
 * Uwaga, sortowanie elementów listy odbywa się w następujący sposób: porównywane są wszystkie liczby
 * bez względu na klasę,  istotne jest aby w klasach DuzaLiczba iDuzaLiczbaZespolona była zdefiniowana
 * funkcja o nazwie Wartosc zwracająca wartość typu char*, która będzie porównana, czyli:
 *
 * DuzaLiczba l1 = new DuzaLiczba("1500"));
 *
 * DuzaLiczbaZespolona  l2 = new DuzaLiczbaZespolona(-3000,1499);
 *
 * cout << l1.Wartosc();  // "1500"
 * cout << l2.Wartosc();  // "3000"
 *
 * lub np.:
 *
 * cout << l2.Wartosc();  // "1499"
 *
 * lub np.:
 *
 * cout << l2.Wartosc();  // "-1501"
 *
 * I później...
 *
 * if(Lista::porownajLiczby(l1.Wartosc(),l2.Wartosc()))
 * // zamień miejscami
 * else
 * // nie zamieniaj miejscami
 *
 * lub nawet tak, a wywołanie funkcji  Wartosc  zostanie wykonane wewnątrz funkcji, a nie na zewnątrz jak poprzednio:
 *
 * if(Lista::porownajLiczby(l1,l2))
 * // zamień miejscami
 * else
 * // nie zamieniaj miejscami
 *
 * Uwaga, funkcja porownajLiczby jest funkcją statyczną. Co to znaczy?
 *
 * Aby poprawnie rozwiązać zadanie należy zaimplementować dwie klasy. Pierwsza z nich:
 *
 * class ListaDuzychLiczb {
 * ElementListy *pierwszy;
 * ElementListy *ostatni;
 * public:
 * .....
 * };
 *
 * reprezentuje całą listę wskazując jej pierwszy i ostatni element, wraz ze zdefiniowanymi powyższymi operacjami. Druga klasa reprezentuje pojedynczy element listy (ElementListy) wraz ze wskaźnikami na element poprzedni i element następny na liście
 *
 * class ElementListy {
 * Liczba *liczba;
 * ElementListy *nastepnyElement;
 * ElementListy *poprzedniElement;
 * public:
 * .....
 * };
 *
 * Co to za klasa Liczba i skąd ona się tu wzięła? Mianowicie, klasa ta jest klasą bazową (dziedziczenie) dla klas DuzaLiczba i DuzaLiczbaZespolona. Ale więcej o tym na ćwiczeniach.
 *
 * Klasy należy zaimplementować tak, aby wykonanie poniższej funkcji main było poprawne. Należy pamiętać o konieczności implementacji wszystkich niezbędnych konstruktorów, operatorów, destruktorów.
 *
 * int main(){
 *
 * ListaDuzychLiczb *lista = new ListaDuzychLiczb();
 *
 * lista->wstawNaPoczatek(new DuzaLiczba("9129081391"));
 * lista->wstawNaPoczatek(new DuzaLiczbaZespolona(12908,1391));
 * lista->wstawNaKoniec(new DuzaLiczba("81391"));
 * lista->wstawNaKoniec(new DuzaLiczbaZespolona(12908,1391));
 * for(int i=0; i<15; i++){
 * lista->wstawNaPozycje (new DuzaLiczba(rand()*9283), 1);
 * lista->wstawNaPozycje (new DuzaLiczbaZespolona(rand()*9293, rand()*92983), 1);
 * }
 *
 * cout << lista;
 *
 * lista->sortuj();
 *
 * cout << lista;
 *
 * lista->usunPierwszyElement();
 * cout << lista;
 * lista->usunOstatniElement();
 * cout << lista;
 * lista->usunPozycje(3);
 * cout << lista;
 * lista->usunWszystkieElementy();
 * cout << lista;
 *
 * delete lista;
 * }
 *
 * Version: $Id: main.cpp 89 2012-01-17 21:42:17Z s8376@pjwstk.edu.pl $
 */
#include <iostream>
#include "ListaDuzychLiczb.h"

using namespace std;

int main()
{
    ListaDuzychLiczb *lista = new ListaDuzychLiczb();

//    lista->wstawNaPoczatek(new DuzaLiczba("9129081391"));
//    lista->wstawNaPoczatek(new DuzaLiczbaZespolona(12908, 1391));
//    lista->wstawNaKoniec(new DuzaLiczba("81391"));
//    lista->wstawNaKoniec(new DuzaLiczbaZespolona(12908, 1391));
//    for (int i = 0; i < 15; i++) {
//        lista->wstawNaPozycje(new DuzaLiczba(rand() * 9283), 1);
//        lista->wstawNaPozycje(new DuzaLiczbaZespolona(rand() * 9293, rand()
//                * 92983), 1);
//    }
//
//    cout << lista;
//
//    lista->sortuj();
//
//    cout << lista;
//
//    lista->usunPierwszyElement();
//    cout << lista;
//    lista->usunOstatniElement();
//    cout << lista;
//    lista->usunPozycje(3);
//    cout << lista;
//    lista->usunWszystkieElementy();
//    cout << lista;
//
//    delete lista;

    return 0;
}
